/**
 * @file dbmusique.c
 * @brief Fichier source du module dbmusique.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

/* *********************************************************************

                       Librairies de database                          

********************************************************************* */

#include "dbmusique.h"

/* *********************************************************************

                        Fonctions                                      

********************************************************************* */

void recuperation_DMus(Oeuvre *oeuvre, const int id)
{
  if(oeuvre)
    {
      DataBase data;
      if(id == 0)
	{
	  /* Selection de toutes les musiques */
	  prepare_Db(&data, "select rowid, piste, duree, paroles from musique");
	}
      else
	{
	  prepare_Db(&data, "select rowid, piste, duree, paroles from musique where rowid = ?");
	  bindValueInt_Db(&data, 1, id);
	}
      if(execute_Db(&data))
	{
	  Musique *musique = creer_Mus();
	  Temps *tps = NULL;
	  int idDuree;
	  setId_Mus(musique, getValueInt_Db(&data,0));
	  setPiste_Mus(musique, getValueInt_Db(&data,1));
	  idDuree = getValueInt_Db(&data, 2);
	  recuperation_DTem(&tps, idDuree);
	  setDuree_Mus(musique, tps);
	  detruire_Tem(&tps);
	  setParoles_Mus(musique, getValueText_Db(&data,3));
	  setMedia_Oeu(oeuvre, musique, copier_Mus);
	  detruire_Mus(&musique);
	}
      finalise_Db(&data);
    }
}

void insertion_DMus(Musique *musique, const int forUpdate)
{
  if(musique)
    {
      DataBase data;
      ouvrir_Db();
      if(getSup_Mus(musique))
	{
	  suppression_DMus(getId_Mus(musique));
	  return;
	}
      insertion_DTem(getDuree_Mus(musique));
      if(!forUpdate)
	{
	  prepare_Db(&data, "insert into musique (piste, duree, paroles) values (?, ?, ?)");
	}
      else
	{
	  if(getMaj_Mus(musique) == 1)
	    {
	      prepare_Db(&data, "update musique set piste = ?, duree = ?, paroles = ? where rowid = ?");
	      bindValueInt_Db(&data, 4, getId_Mus(musique));
	    }
	}
      if(getMaj_Mus(musique) == 1 || !forUpdate)
	{
	  bindValueInt_Db(&data, 1, getPiste_Mus(musique));
	  insertion_DTem(getDuree_Mus(musique));
	  bindValueInt_Db(&data, 2, getId_Tem(getDuree_Mus(musique)));
	  bindValueText_Db(&data, 3, getParoles_Mus(musique));
	  if(execute_Db(&data))
	    {
	    }
	  finalise_Db(&data);
	}
    }
}

void suppression_DMus(const int id)
{
  if(id)
    {
      DataBase data;
      ouvrir_Db();
      prepare_Db(&data, "delete from musique where rowid = ?");
      bindValueInt_Db(&data, 1, id);
      if (execute_Db(&data))
        {
	  
        }
      finalise_Db(&data);
    }
}

void regression_DMus()
{
  Musique musique;
  Temps tps;
  
  init_Mus(&musique);
  
  setPiste_Mus(&musique,1);
  setId_Mus(&musique,0);
  setParoles_Mus(&musique, "Parole de test");
  init_Tem(&tps);
  setMinute_Tem(&tps, 10);
  setDuree_Mus(&musique, &tps);
  liberer_Tem(&tps);
  insertion_DMus(&musique, 0);
  liberer_Mus(&musique);
  fermer_Db();
}
